Ext.define('TS.lib.Grid', {
	extend: 'Ext.grid.Panel',
	alias:'widget.grid',
	forceFit:true,
	loadMask: true,
	flex:true,
	stateful:false,
	stripeRows: true,
	//autoScroll:true,
	//autoHeight:false,
	//autoHeight:true,// TODO - tego chyba niemusi niepowiinno byc
	autoDestroy: true,
	//frame:false,
	initComponent:function(c){
		this.callParent(arguments);
		this.initConfig(c);
		this.on('itemdblclick',this.onDblClick);//potrzebne
		this.on('edit',this.onEdit);
		
		this.noPager || this.addDocked(Factory.toolbar.page(this.getStore()));
	},
	border: false,
	enableColumnMove: true,
	onDblClick:function(grid,index,event){
		var sel = grid.getSelectionModel().getSelection()[0];
		var id = sel.internalId;
		if (id && id.indexOf('ext')==-1){
			if(!grid.panel){// TODO na action i project tego niema ale juz na stawkach jest 
				// moze chodzi o przenoszenie eventów click dblclick
				grid.panel=grid;
			};
			
			var forms = Ext.ComponentQuery.query(grid.panel.xtype.split('grid')[0]+'form');
			if(forms && forms[0]){var f = forms[0];}
			if(f && typeof f.getForm === 'function'){
				f.getForm().reset();
				Util.f.load(f,id,grid.panel.onFormLoad);
			};
		}
	},
	validEdit:function(cfg,e){
		var rules = cfg.rules;
		
		// Czy nie phantom lub inne cudo.
		if(!e.record.internalId || e.record.internalId.indexOf('ext')!=-1 || !e.field){
			cfg.allowNew || e.record.reject();// nie rejectuje ale nie zapisuje
			return false;
		}
		// Reguły validacji
		if(rules){
			var test;
			if(!Ext.isArray(rules))rules = [rules];
			for(var i=0;i<rules.length;i++){
				if((test = rules[i](e.record))!==true){
					e.record.reject();
					Factory.flyer.bad(test || 'Naruszenie reguły edycji tabeli!');
					return false;
				}
			}
			return true;
		} else return true;
	},
	onEdit:function(editor,e){
		var cfg = e.grid.editConfig || {};
		
		if(!this.validEdit(cfg,e)){
			return false;
		}
		
		if(typeof cfg.onEdit === 'function')cfg.onEdit(e);//TODO user_grid
		
		Ext.Ajax.request({
			url: cfg.url || URL.util.editorSave,
			params:{
				c:cfg.Class,f:e.field,v:e.value,
				w:simpleWhere(e.record.idProperty,e.record.internalId)
			},
			success:function(){
				var x = Ext.decode(arguments[0].responseText);
				if(x.data == 1){
					Factory.flyer.good('Zapisano.');
					e.record.commit();
					cfg.callback && cfg.callback(e.record.internalId);
				} else {
					Factory.flyer.bad(x.success==true ? 'Wartość nie uległa zmianie.' : (x.msg || 'Błąd edycji #1.'));
					e.record.reject();
				}
			},
			failure:function(){
				stack();
				Factory.flyer.bad('Bład edycji #2.');
			}
		});
	},
	viewConfig:{
		emptyText:HTML.grid_empty,
		getRowClass: Factory.rowClass.isNew
	}
	
	
});